package modelo;

import home.HomePersistenciaHibernate;

import java.util.List;

import excepciones.AvionLlenoException;
import excepciones.CodigoValidacionErroneoException;
import modelo.tp2.Tramo;

public class ModuloAdministrativo extends Sistema{
	
	public ModuloAdministrativo(HomePersistenciaHibernate hph){
		super(hph);
	}
	
	//Como usuario quiero consultar los asientos disponibles para un determinado tramo.
		public List<Asiento> asientosDisponibles(Tramo tramo){
			return this.getHomePersistenciaHibernate().asientosDisponiblesDe(tramo);
		}
		
		public void asignarUsuarioAAsiento(Usuario usuario, List<Asiento> asientosDisponibles, int asientosQuePido){
			this.getHomePersistenciaHibernate().asignarAsientosDeA(usuario, asientosDisponibles, asientosQuePido);
		}
		
		//Como usuario quiero reservar un conjunto de asientos, comprando todos o ninguno
		public void reservarAsientoParaEn(Usuario usuario, int asientosQuePido, List<Asiento> asientosDisponibles){
			//List<Asiento> asientosDisponibles = this.asientosDisponibles(tramo);
			if(asientosDisponibles.size() >= asientosQuePido){
				this.asignarUsuarioAAsiento(usuario, asientosDisponibles, asientosQuePido);
			}else{
				throw new AvionLlenoException();
			}
		}
		
		public void validarCuenta(String nombre_usuario, String l) throws Exception {
//			if(this.getHomeMemoria().traerUsuarioYCodigo(u.getNombre_usuario()).getValue() == u.getCodigo_validacion()){
//				u.setValidado(true);
//			}
			String codigo = this.getHomePersistencia().traerCodigoValidacion(nombre_usuario);
			if(l.equals(codigo)){
				this.getHomePersistencia().validarUsuario(nombre_usuario);
			}else{
				throw new CodigoValidacionErroneoException();
			}
		}
		
		public void enviarCodigoA(Usuario u){
			u.setCodigo_validacion(u.getNombre_usuario()+"aaa");
		}

		public void crearUsuario(String nombre_usuario, String nombre,
				String apellido, String email, String fechaNac, String contrasena) {
				Usuario u = new Usuario(nombre_usuario, nombre, apellido ,email, fechaNac, contrasena);
				//this.getHomeMemoria().anadirUsuario(u,r.nextLong());
				try {
					this.getHomePersistencia().anadirUsuario(u, u.getNombre_usuario() + "aaa");
				} catch (Exception e) {
					e.printStackTrace();
				}
				this.enviarCodigoA(u);
		}
		
		public Usuario TraerUsuarioCon(String nombre_usuario){
			return this.getHomePersistenciaHibernate().obtenerUsuarioCon(nombre_usuario).get(0);
		}

}
